import pandas as pd
import os
from collections import defaultdict

# 设置目录路径，这里假设所有的xlsx文件都在当前目录下的data文件夹中
directory_path = 'data'

# 身份证号可能存在的列名列表
id_column_names = ['身份证号', '身份证']

# 可能的手机号列名列表
phone_column_names = ['主要手机', '购票人', '订票手机号']

# 可能的公司名称列名列表
company_column_names = ['公司名称', '公司']

# 使用defaultdict来存储身份证号及其相关信息
id_info = defaultdict(lambda: {"表格": set(), "姓名": None, "手机号": None, "公司": None, "总次数": 0})

# 遍历目录下的所有xlsx文件
for file_name in os.listdir(directory_path):
    print(f'正在处理文件 {file_name}...')
    # 判断文件名是否以.xlsx结尾
    if file_name.endswith('.xlsx'):
        print(f"{file_name}是excel文件，正在处理...")
        # 构建完整的文件路径
        file_path = os.path.join(directory_path, file_name)
        print(file_path)
        # 读取xlsx文件
        df = pd.read_excel(file_path)
        print(df.head(6))

        # 检查身份证号列名是否存在
        id_column_name = next((col for col in id_column_names if col in df.columns), None)
        print(id_column_name)
        # 如果找到身份证号列名，则更新计数器和相关信息
        if id_column_name:
            # 查找手机号和公司名称列名
            phone_column_name = next((col for col in phone_column_names if col in df.columns), None)
            company_column_name = next((col for col in company_column_names if col in df.columns), None)

            for index, row in df.iterrows():
                id_number = row[id_column_name]
                # print(id_number)
                if pd.notna(id_number):  # 确保身份证号不是NaN
                    id_info[id_number]["表格"].add(file_name)
                    id_info[id_number]["总次数"] += 1

                    # 更新姓名、手机号、公司信息（这里假设每个身份证号对应的信息是唯一的）
                    id_info[id_number]["姓名"] = row['姓名'] if pd.notna(row['姓名']) else id_info[id_number]["姓名"]
                    id_info[id_number]["手机号"] = row[phone_column_name] if pd.notna(row[phone_column_name]) else \
                    id_info[id_number]["手机号"]
                    id_info[id_number]["公司"] = row[company_column_name] if pd.notna(row[company_column_name]) else \
                    id_info[id_number]["公司"]
        else:
            print(f'在文件 {file_name} 中未找到名为"{id_column_names}"的列。')

# 将结果转换为DataFrame
result_df = pd.DataFrame.from_dict(
    ({k: {"身份证号": k, "表格": list(v["表格"]), "姓名": v["姓名"], "手机号": v["手机号"], "公司": v["公司"],"总次数": v["总次数"]} for k, v in id_info.items()}),
    orient='index').reset_index(drop=True)
print(result_df)

# 保存新的DataFrame为xlsx文件
output_file_name = '身份证信息统计.xlsx'
result_df.to_excel(output_file_name, index=False)

print(f'统计完成，结果已保存到 {output_file_name}')
